package com.example.bitoperation;

/**
 * 不使用运算符 + 和 - ，计算两整数 a 、b 之和。
 *
 *  示例 1:
 *  输入: a = 1, b = 2
 * 输出: 3
 *
 *  示例 2:
 *  输入: a = -2, b = 3
 * 输出: 1
 */
public class Leetcode371_GetSum {
    public static void main(String[] args) {

        System.out.println(new Solution().getSum(1, 10));
    }

    static class Solution{
        /**
         * 1.a,b进行异或得到不进位的加法
         * 2.a,b进行与运算然后左移一位得到进位
         * @param a
         * @param b
         * @return
         */
        public int getSum(int a, int b) {
            // 递归方式
//            if (b != 0) {
//                int xor = a ^ b;
//                int and = (a & b) << 1;
//                return getSum(xor, and);
//            }
//            return a;

            // 非递归方式
            while (b != 0) {
                int xor = a ^ b;
                b = (a & b) << 1;
                a = xor;
            }
            return a;
        }
    }
}
